#include <CtrlLib/CtrlLib.h>

using namespace Upp;

#include "Dialogs.h"

FileSel& PdfFs()
{
	static FileSel fs;
	return fs;
}

ConfigurarCarnetDlg::ConfigurarCarnetDlg()
{
	CtrlLayoutCancel(*this, "Configurar Carnet");
	Icon(CentroJyPImg::icono_min32x32(),CentroJyPImg::icono());
	cancel.SetImage(CentroJyPImg::cancelar());
	imprimir_btn.SetImage(CentroJyPImg::imprimir_carnet());
	exportar_btn.SetImage(CentroJyPImg::pdf16x16());
	editor.Extended();

	imprimir_btn <<= THISBACK(GenerarReporte);
	exportar_btn <<= THISBACK(ExportarAPdf);
}

void ConfigurarCarnetDlg::ConfigurandoCarnet(int nro_socio_)
{
	if (! (SQL * Select(NRO_AFILIADO_A,TIPO_DOC_A,DNI_A,NRO_SOCIO_A,APELLIDOS_A,CALLE_A,NRO_CALLE_A,PISO_A,DPTO_A,CIUDAD_A,FECHA_REGISTRO_A).From(AFILIADO).Where(NRO_SOCIO_A == nro_socio_))) {
		Exclamation(SQL.GetLastError());
		return;
	}
	
	qtf = Null;
	while (SQL.Fetch()) {
		qtf << "[ {{5000:5000 [s0;= [*+65 Centro de Jubilados y Pensionados Municipales de Rio Cuarto \"SAGRADA FAMILIA\"]&]";
		qtf << "[s0;= [*C+80= Carnet de Afiliación]&]";
		qtf << "[s0;=*C3 &]";
		qtf << AsString(SQL[APELLIDOS_A]);
		qtf << "&[s0; [C+48 APELLIDO/S Y NOMBRE/S&&&]]";
		int cantCaracteres = AsString(SQL[NRO_AFILIADO_A]).GetCharCount();
		switch (cantCaracteres) {
			case 3:
				qtf << AsString(SQL[NRO_AFILIADO_A]) << "                        ";
			break;
			case 4:
				qtf << AsString(SQL[NRO_AFILIADO_A]) << "                      ";
			break;
			case 5:
				qtf << AsString(SQL[NRO_AFILIADO_A]) << "                    ";
			break;
			case 6:
				qtf << AsString(SQL[NRO_AFILIADO_A]) << "                  ";
			break;
		}
		qtf << AsString(SQL[FECHA_REGISTRO_A]);
		qtf << "&[s0; [C+48 NUMERO DE AFILIADO            FECHA DE EMISION&&&]]";
		String tdni = SQL[TIPO_DOC_A];
		if (SQL[TIPO_DOC_A] == "DNI")
			qtf << "DNI ";
		if (SQL[TIPO_DOC_A] == "LC")
			qtf << "LC ";
		if (SQL[TIPO_DOC_A] == "LE")
			qtf << "LE ";
		if (SQL[TIPO_DOC_A] == "Pasaporte")
			qtf << "Pasaporte ";
		
//		switch (tdni) {
//			case 1:
//				qtf << "DNI ";
//			break;
//			case 2:
//				qtf << "LC ";
//			break;
//			case 3:
//				qtf << "LE ";
//			break;
//			case 4:
//				qtf << "Pte ";
//			break;
//		}
		qtf << AsString(SQL[DNI_A]) << "       " << AsString(SQL[NRO_SOCIO_A]);
		qtf << "&[C+48 DOCUMENTO                     NUMERO DE SOCIO]]";
		qtf << ":: ";
		qtf << AsString(SQL[CALLE_A]) << "  " << AsString(SQL[NRO_CALLE_A]);
		qtf << "&[s0; [C+48 DOMICILIO&&&]]";
		
		if (SQL[PISO_A].IsNull())
			qtf << "-" << "       ";
		else
			qtf << AsString(SQL[PISO_A]) << "    ";
		if (SQL[DPTO_A].IsNull())
			qtf << "-";
		else
			qtf << AsString(SQL[DPTO_A]);
		qtf << "&[s0; [C+48 PISO    DEPARTAMENTO&&&]]";
		
		qtf << AsString(SQL[CIUDAD_A]);
		qtf << "&[s0; [C+48 LOCALIDAD&&&&&&&&&]]";
		qtf << "[s0; [C+48 FIRMA RESPONSABLE                         SELLO]}} ]";
	}
	editor.SetQTF(qtf);
}

void ConfigurarCarnetDlg::GenerarReporte()
{
	Report reporte;
	reporte.Put(qtf);
	Perform(reporte,"Impresión de Carnet de Afilido");
}

void ConfigurarCarnetDlg::ExportarAPdf()
{
	FileSel& fs = PdfFs();
	fs.Type("archivos PDF","*.pdf");
	if(!fs.ExecuteSaveAs("Directorio donde se almacena el archivo PDF.."))
		return;
	
	Size page = Size(3968, 6074);
	PdfDraw pdf;
	UPP::Print(pdf, editor.Get(), page);
	if (! SaveFile(~fs, pdf.Finish()))
		return;
	
	PromptOK(String().Cat()<<"El archivo se ha exportado exitosamente en el directorio \""<<fs.Get() << "\"");
}

//==============================================================================================